package com.example.myapplication.bean

class PrintTemplate(
    val page: PrintPageParameter,
    val elements: List<PrintTemplateElement>

) {
    override fun toString(): String {
        return "PrintTemplate(page=$page, elements=$elements)"
    }
}

interface PrintTemplateElement {}

class PrintPageParameter(
    /**
     * 页宽
     */
    val width: Int,
    /**
     * 页高
     */
    val height: Int
)

class LineElement(
    /**
     * 起始点的 X 坐标
     */
    var x: Int,
    /**
     * 起始点的 Y 坐标
     */
    var y: Int,
    /**
     * 线宽
     */
    val width: Int,
    /**
     * 线高
     */
    val height: Int,
    /**
     * 线宽
     */
    val borderSize: Int

) : PrintTemplateElement

class BoxElement(
    /**
     * 起始点的 X 坐标
     */
    var x: Int,
    /**
     * 起始点的 Y 坐标
     */
    var y: Int,
    /**
     * 宽
     */
    val width: Int,
    /**
     * 高
     */
    val height: Int,
    /**
     * 线宽
     */
    val borderSize: Int
) : PrintTemplateElement

class TextElement(
    /**
     * 起始点的 X 坐标
     */
    var x: Int,
    /**
     * 起始点的 Y 坐标
     */
    var y: Int,
    /**
     * 宽
     */
    val width: Int,
    /**
     * 高
     */
    val height: Int,
    /**
     * 文本域大小，左上到右下
     */
    val viewPort: List<Position>,
    /**
     * 对齐方向
     */
    var hAlign: String,
    /**
     * 字号
     */
    val mag: Int,
    /**
     * 打印机特定设置
     */
    val printerSpec: Map<String, TextElementPrinterSpec>
) : PrintTemplateElement

class TextElementPrinterSpec(
    val font: String
)

class Position(
    val x: Int,
    val y: Int
)


class BarCodeElement(
    /**
     * 起始点的 X 坐标
     */
    var x: Int,
    /**
     * 起始点的 Y 坐标
     */
    var y: Int,
    /**
     * 条形码的高度
     */
    var hight: Int,
) : PrintTemplateElement
